package CSV;

import CSV.CSVBaseListener;
import CSV.CSVParser;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class LoadCSV extends CSVBaseListener {
    public static String EMPTY = "";
    List<Map<String,String>> rows = new ArrayList<Map<String, String>>(16);
    List<String> header ;
    List<String> currentRowFieldValues = new ArrayList<>();


    @Override
    public void exitFile(CSVParser.FileContext ctx){
        super.exitFile(ctx);
    }

    @Override
    public void exitHdr(CSVParser.HdrContext ctx){
        header = new ArrayList<>();
        header.addAll(currentRowFieldValues);
    }

    @Override
    public void exitRow(CSVParser.RowContext ctx){
        if(ctx.getParent().getRuleIndex()==CSVParser.RULE_hdr){
            return;
        }
        Map<String,String> map = new LinkedHashMap<>();
        for (int i = 0; i < header.size(); i++) {
            map.put(header.get(i),currentRowFieldValues.get(i));
        }
        rows.add(map);
    }

    public void exitString(CSVParser.StringContext ctx){
        currentRowFieldValues.add(ctx.STRING().getText());
    }
    public void exitText(CSVParser.TextContext ctx){
        currentRowFieldValues.add(ctx.TEXT().getText());
    }
    public void exitEmpty(CSVParser.EmptyContext ctx){
        currentRowFieldValues.add(EMPTY);
    }

    @Override
    public void enterRow(CSVParser.RowContext ctx){
        currentRowFieldValues.clear();
    }

    public List<Map<String, String>> getRows() {
        return rows;
    }
}

